/**
 * 属性是否成功定义
 * 
 * 反射api Reflect.defineProperty()
 * 
 * 1.返回值
 * 布尔值
 * 
 * 2.触发拦截操作
 * Object.defineProperty(proxy,'boo',{value:'car'})
 * Reflect.defineProperty(proxy,'coo',{value:'bar'})
 * 
 */

const proxy = new Proxy({},{
    /**
     * 
     * @param {*} target 目标对象
     * @param {*} property 目标上的属性
     * @param {*} descriptor 定义属性的配置项
     * @returns 
     */
    defineProperty(target,property,descriptor){
        console.log('defineProperty()');
        return Reflect.defineProperty(...arguments)
    }
});

Object.defineProperty(proxy,'foo',{
    value:'bar',
    writable: true, // 属性可写
    enumerable: true, // 属性可枚举
    configurable: true // 属性可配置
});

Object.defineProperty(proxy,'boo',{value:'car'})//defineProperty()
Reflect.defineProperty(proxy,'coo',{value:'bar2'})//defineProperty()

console.log(proxy.foo);//bar
console.log(proxy.boo);//car
console.log(proxy.coo);//bar2

Object.getOwnPropertyDescriptor